package kara;

import java.util.HashSet;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

//bfs字符串接龙
//单词间只有一个字母不同则为相邻节点
//bfs最短路径问题
public class A110 {
    static int size;
    static HashSet<String> set=new HashSet<>();
static HashSet<String> vis=new HashSet<>();//存储遍历过的单词
    public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
size=sc.nextInt();
String beginStr=sc.next();
String endStr=sc.next();
for(int i=0;i<size;i++){
    set.add(sc.next());
}
set.add(beginStr);
set.add(endStr);
int res=bfs(beginStr,endStr);
System.out.println(res);
    }
    static int bfs(String beginStr,String endStr){
        //将起点加入队列
        Queue<String> queue=new LinkedList<>();
        queue.offer(beginStr);
        //标记
        vis.add(beginStr);
        queue.offer(null);//添加区分符
        int len=1;
    while(!queue.isEmpty()){
      //层数，包含原层数
        String cur = queue.poll();
        if(cur==null){
            //判断是否还有元素
            if(!queue.isEmpty()){
                //还有元素
                queue.offer(null);
                len++;
            }
            continue;
        }
        //处理字符串
        char[] charArray = cur.toCharArray();
        //遍历字符串每个字母，换为其他
        for(int i=0;i<charArray.length;i++)
      {

            //记住原来的字母
            char oldChar=  charArray[i];
            for( char j='a';j<='z';j++){
charArray[i]=j;
                String newStr = new String(charArray);
                if(!vis.contains(newStr)&&set.contains(newStr)){
                    //这个字符是没被遍历且包含的
                    //将其加入队列,标记为用过
                    vis.add(newStr);
          queue.offer(newStr);
          if(newStr.equals(endStr))return len+1;
                }

            }
            //恢复现场
          charArray[i]=oldChar;

        }

    }
    return 0;
    }
}

